<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  
  
  <title>二、linux shell教程 | Hexo</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <meta name="description" content="第2章 Linux Shell基础2.1Shell概述2.1.1什么是shell 命令行模式下，用户和UNIX&#x2F;Linux操作系统内核间的接口。它接收用户输入的命令或数据，并解释执行，之后，将命令的执行结果在显示器等输出设备上显示出来。  Shell：外壳，也就是界面 Shell的作用 接受输入 解释执行接受到的输入信息 输出结果    2.1.2常用的Linux Shell Sh:Bourne">
<meta property="og:type" content="article">
<meta property="og:title" content="二、linux shell教程">
<meta property="og:url" content="https://goofyer.gitee.io/notes-on-computer-expertise/2022/01/03/linux/%E4%BA%8C%E3%80%81linux-shell%E6%95%99%E7%A8%8B/index.html">
<meta property="og:site_name" content="Hexo">
<meta property="og:description" content="第2章 Linux Shell基础2.1Shell概述2.1.1什么是shell 命令行模式下，用户和UNIX&#x2F;Linux操作系统内核间的接口。它接收用户输入的命令或数据，并解释执行，之后，将命令的执行结果在显示器等输出设备上显示出来。  Shell：外壳，也就是界面 Shell的作用 接受输入 解释执行接受到的输入信息 输出结果    2.1.2常用的Linux Shell Sh:Bourne">
<meta property="og:locale" content="en_US">
<meta property="article:published_time" content="2022-01-03T03:11:59.000Z">
<meta property="article:modified_time" content="2022-01-03T20:15:54.962Z">
<meta property="article:author" content="John Doe">
<meta name="twitter:card" content="summary">
  
    <link rel="alternate" href="/notes-on-computer-expertise/atom.xml" title="Hexo" type="application/atom+xml">
  
  
    <link rel="shortcut icon" href="/notes-on-computer-expertise/favicon.png">
  
  
    
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/typeface-source-code-pro@0.0.71/index.min.css">

  
  
<link rel="stylesheet" href="/notes-on-computer-expertise/css/style.css">

  
    
<link rel="stylesheet" href="/notes-on-computer-expertise/fancybox/jquery.fancybox.min.css">

  
<meta name="generator" content="Hexo 5.4.0"></head>

<body>
  <div id="container">
    <div id="wrap">
      <header id="header">
  <div id="banner"></div>
  <div id="header-outer" class="outer">
    <div id="header-title" class="inner">
      <h1 id="logo-wrap">
        <a href="/notes-on-computer-expertise/" id="logo">Hexo</a>
      </h1>
      
    </div>
    <div id="header-inner" class="inner">
      <nav id="main-nav">
        <a id="main-nav-toggle" class="nav-icon"></a>
        
          <a class="main-nav-link" href="/notes-on-computer-expertise/">Home</a>
        
          <a class="main-nav-link" href="/notes-on-computer-expertise/archives">Archives</a>
        
      </nav>
      <nav id="sub-nav">
        
          <a id="nav-rss-link" class="nav-icon" href="/notes-on-computer-expertise/atom.xml" title="RSS Feed"></a>
        
        <a id="nav-search-btn" class="nav-icon" title="Search"></a>
      </nav>
      <div id="search-form-wrap">
        <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit">&#xF002;</button><input type="hidden" name="sitesearch" value="https://goofyer.gitee.io/notes-on-computer-expertise"></form>
      </div>
    </div>
  </div>
</header>

      <div class="outer">
        <section id="main"><article id="post-linux/二、linux-shell教程" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2022/01/03/linux/%E4%BA%8C%E3%80%81linux-shell%E6%95%99%E7%A8%8B/" class="article-date">
  <time class="dt-published" datetime="2022-01-03T03:11:59.000Z" itemprop="datePublished">2022-01-03</time>
</a>
    
  <div class="article-category">
    <a class="article-category-link" href="/notes-on-computer-expertise/categories/linux/">linux</a>
  </div>

  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 class="p-name article-title" itemprop="headline name">
      二、linux shell教程
    </h1>
  

      </header>
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        <h1 id="第2章-Linux-Shell基础"><a href="#第2章-Linux-Shell基础" class="headerlink" title="第2章 Linux Shell基础"></a>第2章 Linux Shell基础</h1><h2 id="2-1Shell概述"><a href="#2-1Shell概述" class="headerlink" title="2.1Shell概述"></a>2.1Shell概述</h2><h3 id="2-1-1什么是shell"><a href="#2-1-1什么是shell" class="headerlink" title="2.1.1什么是shell"></a>2.1.1什么是shell</h3><ul>
<li>命令行模式下，用户和UNIX/Linux操作系统内核间的接口。它接收用户输入的命令或数据，并解释执行，之后，将命令的执行结果在显示器等输出设备上显示出来。 </li>
<li>Shell：外壳，也就是界面</li>
<li>Shell的作用<ul>
<li>接受输入</li>
<li>解释执行接受到的输入信息</li>
<li>输出结果</li>
</ul>
</li>
</ul>
<h3 id="2-1-2常用的Linux-Shell"><a href="#2-1-2常用的Linux-Shell" class="headerlink" title="2.1.2常用的Linux Shell"></a>2.1.2常用的Linux Shell</h3><ul>
<li>Sh:Bourne shell</li>
<li>Bash:Bourne Again Shell，最常用</li>
<li>Csh：C Shell,加州大学伯克利分校，与Bourne Shell基本兼容，但是程序设计界面有很大不同</li>
<li>Ksh:Korn Shell,Unix系统下最普遍的</li>
<li>Tcsh:C Shell的加强版</li>
<li>Zsh：Z Shell，最新的Shell，与Bourn Shell兼容<h2 id="2-2常用的Shell命令"><a href="#2-2常用的Shell命令" class="headerlink" title="2.2常用的Shell命令"></a>2.2常用的Shell命令</h2><h3 id="命令格式"><a href="#命令格式" class="headerlink" title="命令格式"></a>命令格式</h3></li>
<li>在Shell提示符下，就可以输入 LINUX命令。</li>
<li>LINUX命令的基本格式如下：</li>
<li>command 参数1 参数2 … 参数n</li>
<li>LINUX命令由一个命令(command)和零到多个参数构成，命令和参数之间，以及参数与参数之间用空格隔开。 LINUX命令区分大小写，且命令和参数之间必须隔开。<h3 id="简单命令"><a href="#简单命令" class="headerlink" title="简单命令"></a>简单命令</h3>| 解释         | LINUX命令 | 命令举例      |<br>| —————— | ————- | ——————- |<br>| 査看日期     | date      | date          |<br>| 显示日历     | cal       | cal 2008      |<br>| 显示大字56   | banner    | banner “ABCD” |<br>| 计算器       | bc        | bc            |<br>| 查看谁在使用 | who       | who           |<br>| 査看我是谁   | who am i  | who am i      |<br>| 清除屏幕     | clear     | clear         |<br>| 帮助         | man       | man date      |<br>| 修改口令     | passwd    | passwd        |<h4 id="系统注销命令"><a href="#系统注销命令" class="headerlink" title="系统注销命令"></a>系统注销命令</h4></li>
<li>在每次使用完后，一定要进行注销，以防他人通 过你的帐号进入系统，并保证系统的完整性。注销过 程如下：在系统提示符下，运行：<ul>
<li>$ exit</li>
<li>$ logout</li>
<li>或直接按键：ctrl+d</li>
</ul>
</li>
<li>注：由于系统的不同，注销的命令也可能不同。<h4 id="系统关机命令"><a href="#系统关机命令" class="headerlink" title="系统关机命令"></a>系统关机命令</h4></li>
<li>是用来关闭linux操作系统的。作为一个普通用户是不能够随便关闭系统的，因为虽然你用完了机器，可是这时候可能还有其它的用户正在使用系统。因此，关闭系统 或者是重新启动系统的操作只有管理员才有权限执行。</li>
<li>shutdown关闭系统的时候有以下几种格式：<ul>
<li><h1 id="shutdown-h-now-（下完这个指令，系统立刻-关机）"><a href="#shutdown-h-now-（下完这个指令，系统立刻-关机）" class="headerlink" title="shutdown -h now （下完这个指令，系统立刻 关机）"></a>shutdown -h now （下完这个指令，系统立刻 关机）</h1></li>
<li><h1 id="shutdown-h-20-25-（系统会在今天的-20：-25关机）"><a href="#shutdown-h-20-25-（系统会在今天的-20：-25关机）" class="headerlink" title="shutdown -h 20:25 （系统会在今天的 20：    25关机）"></a>shutdown -h 20:25 （系统会在今天的 20：    25关机）</h1></li>
<li><h1 id="shutdown-h-10-（系统会在十分钟后关机"><a href="#shutdown-h-10-（系统会在十分钟后关机" class="headerlink" title="shutdown -h +10 （系统会在十分钟后关机"></a>shutdown -h +10 （系统会在十分钟后关机</h1></li>
<li>输入halt，系统就会开始进入关闭过程，其效果和shutdown -h now是完全一样的。<h4 id="系统重启命令"><a href="#系统重启命令" class="headerlink" title="系统重启命令"></a>系统重启命令</h4></li>
</ul>
</li>
<li>用来重新启动系统的。当你输入重启命令后 ，你就会看到系统正在将一个一个的服务都关闭掉，然后再关闭文件系统和硬件，接着机器开始 重新自检，重新引导，再次进入linux系统。</li>
<li>shutdown重启系统<ul>
<li><h1 id="shutdown-r-now-（下完这个指令，系统立刻-重启）"><a href="#shutdown-r-now-（下完这个指令，系统立刻-重启）" class="headerlink" title="shutdown -r now （下完这个指令，系统立刻 重启）"></a>shutdown -r now （下完这个指令，系统立刻 重启）</h1></li>
<li><h1 id="shutdown-r-20-25-（系统会在今天的-20：-25重启）"><a href="#shutdown-r-20-25-（系统会在今天的-20：-25重启）" class="headerlink" title="shutdown -r 20:25 （系统会在今天的 20：    25重启）"></a>shutdown -r 20:25 （系统会在今天的 20：    25重启）</h1></li>
<li><h1 id="shutdown-r-10-（系统会在十分钟后重启）"><a href="#shutdown-r-10-（系统会在十分钟后重启）" class="headerlink" title="shutdown -r +10 （系统会在十分钟后重启）"></a>shutdown -r +10 （系统会在十分钟后重启）</h1><h3 id="目录管理"><a href="#目录管理" class="headerlink" title="目录管理"></a>目录管理</h3><h4 id="（一）目录结构"><a href="#（一）目录结构" class="headerlink" title="（一）目录结构"></a>（一）目录结构</h4></li>
</ul>
</li>
<li>目录结构：树形</li>
<li>分割符：“/”</li>
<li>Linux系统的常用目录<br>| 符号 | 解释 |<br>| —— | ——————————— |<br>| /bin | 大部分可执行的Linu x命令和共用程序 |<br>| /dev | 设备文件，如/dev/cdO |<br>| /etc | 系统管理命令和数据文件 |<br>| /lib | C程序库 |<br>| /usr | 存放用户的家目录和用户共用程序或文件 |<br>| /home | 用户的家目录 |<h4 id="（二）常用的目录操作命令"><a href="#（二）常用的目录操作命令" class="headerlink" title="（二）常用的目录操作命令"></a>（二）常用的目录操作命令</h4></li>
</ul>
<div class="table-container">
<table>
<thead>
<tr>
<th></th>
<th>命令</th>
<th>命令举例</th>
<th>类似DOS命令</th>
</tr>
</thead>
<tbody>
<tr>
<td>显示当前目录</td>
<td>pwd</td>
<td>pwd</td>
<td>cd</td>
</tr>
<tr>
<td>改变目录</td>
<td>cd</td>
<td>cd /usr</td>
<td>cd c:usr</td>
</tr>
<tr>
<td>进入家目录</td>
<td>cd</td>
<td>cd</td>
<td></td>
</tr>
<tr>
<td>创建目录</td>
<td>mkdir</td>
<td>mkdir abc</td>
<td>md abc</td>
</tr>
<tr>
<td>删除空目录</td>
<td>rmdir</td>
<td>rmdir abc</td>
<td>rd abc</td>
</tr>
<tr>
<td>删除目录及其内容</td>
<td>rm -r</td>
<td>rm -r abc</td>
<td>deltree abc</td>
</tr>
<tr>
<td>显示目录内容</td>
<td>Is</td>
<td>Is -1 abc（目录长列表）<br/>Is -a abc（所有类型文件）</td>
<td>dir abc</td>
</tr>
</tbody>
</table>
</div>
<h2 id="2-2-4文件管理"><a href="#2-2-4文件管理" class="headerlink" title="2.2.4文件管理"></a>2.2.4文件管理</h2><h3 id="一、文件类型"><a href="#一、文件类型" class="headerlink" title="一、文件类型"></a>一、文件类型</h3><div class="table-container">
<table>
<thead>
<tr>
<th>文件</th>
<th>符号</th>
</tr>
</thead>
<tbody>
<tr>
<td>1)普通文件(ordinal file)(文本文件，二进制文件）</td>
<td>-</td>
</tr>
<tr>
<td>2)目录文件(directory)</td>
<td>d</td>
</tr>
<tr>
<td>3)块设备文件</td>
<td>b</td>
</tr>
<tr>
<td>4)字符设备文件</td>
<td>c</td>
</tr>
<tr>
<td>5)号链接文件(symbolic links)</td>
<td>l</td>
</tr>
</tbody>
</table>
</div>
<div class="table-container">
<table>
<thead>
<tr>
<th>？</th>
<th>任一个字符，如”abc?”</th>
</tr>
</thead>
<tbody>
<tr>
<td>*</td>
<td>任何字符，如\”ab*10”表示以ab开头和以10结尾的名字</td>
</tr>
</tbody>
</table>
</div>
<p>注：区分大小写（file1和File1表示两个不同的文件）；</p>
<h3 id="二、文件权限"><a href="#二、文件权限" class="headerlink" title="二、文件权限"></a>二、文件权限</h3><ul>
<li>LINUX文件有三种存取权限</li>
</ul>
<div class="table-container">
<table>
<thead>
<tr>
<th>权限</th>
<th>普通文件的存取权限</th>
<th>目录的存取权限</th>
</tr>
</thead>
<tbody>
<tr>
<td>r</td>
<td>具有读取文件的权利</td>
<td>能读取文件名称和内容</td>
</tr>
<tr>
<td>w</td>
<td>具有写入文件的权利</td>
<td>能修改和删除文件，可以改变文件名</td>
</tr>
<tr>
<td>x</td>
<td>具有执行文件的权利</td>
<td>能使用该目录下的文件（如\\cd\\命令）搜索文件等</td>
</tr>
</tbody>
</table>
</div>
<ul>
<li>有三种类型的用户可以存取文件:</li>
</ul>
<div class="table-container">
<table>
<thead>
<tr>
<th>用户类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>owner</td>
<td>文件的所有者（创建该文件的用户\）</td>
</tr>
<tr>
<td>group</td>
<td>文件的所有者所在的组</td>
</tr>
<tr>
<td>other</td>
<td>其他用户（非owner和非group）</td>
</tr>
</tbody>
</table>
</div>
<ul>
<li>用chmod命令修改文件的存取权限 ：</li>
<li>格式：chmod 用户类型+ 文件权限 文件名</li>
</ul>
<div class="table-container">
<table>
<thead>
<tr>
<th>u</th>
<th>拥有者    (user — owner)</th>
</tr>
</thead>
<tbody>
<tr>
<td>g</td>
<td>与拥有者同一组的用户(group)</td>
</tr>
<tr>
<td>o</td>
<td>其他人(other)</td>
</tr>
<tr>
<td>a</td>
<td>所有人(all)</td>
</tr>
</tbody>
</table>
</div>
<ul>
<li>改变文件所有者的格式如下：（必须对文件具有 write权利才可改变文件的拥有者）<ul>
<li>chown所有者文件名<ul>
<li>chown wjm testl</li>
</ul>
</li>
</ul>
</li>
<li>改变文件所在组的格式如下：（必须是文件的拥 有者或superviso r才能改变文件组别的归属） <ul>
<li>chgrp组名文件名<ul>
<li>chgrp newservice testl<h3 id="三、文件的基本操作命令"><a href="#三、文件的基本操作命令" class="headerlink" title="三、文件的基本操作命令"></a>三、文件的基本操作命令</h3><h4 id="（一）简单命令"><a href="#（一）简单命令" class="headerlink" title="（一）简单命令"></a>（一）简单命令</h4>|简单命令 |命令| 命令举例|<br>| ——————————— | ——————————— | —————————————————————————————— |<br>| 显示文件属性 | ls           | Is -1 abc（文件长列表）<br/>ls-a abc所有文件（包含隐藏文件） |<br>| 显示文件内容 | cat          | cat filel.c                                        |<br>| 拷贝文件     | cP | cp filel file2                                     |<br>| 移动文件     | mv           | mv call.test call.list                             |<br>| 删除文件     | rm           | rm call.list                                       |<h4 id="（二）find命令"><a href="#（二）find命令" class="headerlink" title="（二）find命令"></a>（二）find命令</h4></li>
</ul>
</li>
</ul>
</li>
<li>find命令会在指定目录及其子目录下查找符合条件的 特定文件。</li>
<li>命令格式：    find目录名条件<h4 id="（三）grep-命令"><a href="#（三）grep-命令" class="headerlink" title="（三）grep 命令"></a>（三）grep 命令</h4></li>
<li>按给定的模式在文件中査找信息</li>
<li>格式：grep [options] pattern file<h4 id="（四）cmp命令比较文件"><a href="#（四）cmp命令比较文件" class="headerlink" title="（四）cmp命令比较文件"></a>（四）cmp命令比较文件</h4></li>
<li>cmp可比较两个文件，这两个文件可以是文本文件 也可以是非文本文件。若两个文件内容相同，则不显示任何信息;若不同会显示两个文件第一次数据不同的位置。</li>
<li>命令格式:cmp [.ls]文件名1文件名2</li>
</ul>
<h2 id="2-2-5用户和用户组管理"><a href="#2-2-5用户和用户组管理" class="headerlink" title="2.2.5用户和用户组管理"></a>2.2.5用户和用户组管理</h2><h3 id="一、用户账号"><a href="#一、用户账号" class="headerlink" title="一、用户账号"></a>一、用户账号</h3><ul>
<li>帐号作用：<ul>
<li>用于系统识别用户身份,记录用户在系统中的活动</li>
</ul>
</li>
<li>系统中设置两类用户：<ul>
<li>超级用户:<ul>
<li>拥有系统最高权限，帐号为root</li>
</ul>
</li>
<li>普通用户:<ul>
<li>由超级用户创建的只能管理自己的文件和目录。<h3 id="二、用户账号文件"><a href="#二、用户账号文件" class="headerlink" title="二、用户账号文件"></a>二、用户账号文件</h3><h4 id="1、-etc-passwd："><a href="#1、-etc-passwd：" class="headerlink" title="1、/etc/passwd："></a>1、/etc/passwd：</h4></li>
</ul>
</li>
</ul>
</li>
<li>username : x : uid : gid : comment: homedir : loginshell ⑴(2) (3)    (4)    (5)    (6)    (7)</li>
<li>例如：zhang:*:103:100:zhang hongguang:/home/zhang:/bin/bash<ul>
<li>(1)：用户名</li>
<li>(2)： 口令，加密显示</li>
<li>(3)：用户ID</li>
<li>(4)：用户组ID</li>
<li>(5)：用户信息描述</li>
<li>(6)：用户主目录</li>
<li>(7)：是否允许登录<h3 id="三、用户组文件"><a href="#三、用户组文件" class="headerlink" title="三、用户组文件"></a>三、用户组文件</h3><h4 id="文件-group"><a href="#文件-group" class="headerlink" title="文件/group"></a>文件/group</h4><h5 id="存储与用户帐户相关的用户组信息"><a href="#存储与用户帐户相关的用户组信息" class="headerlink" title="存储与用户帐户相关的用户组信息"></a>存储与用户帐户相关的用户组信息</h5><h4 id="格式：groupname-password-gid-user・list"><a href="#格式：groupname-password-gid-user・list" class="headerlink" title="格式：groupname : password : gid : user・list"></a>格式：groupname : password : gid : user・list</h4></li>
</ul>
</li>
<li>(1)：用户组名称</li>
<li>(2)：用户组口令</li>
<li>(3)：用户组标识</li>
<li>(4)：组中的用户列表<h3 id="四、用户管理的常用命令"><a href="#四、用户管理的常用命令" class="headerlink" title="四、用户管理的常用命令"></a>四、用户管理的常用命令</h3><h4 id="添加帐号"><a href="#添加帐号" class="headerlink" title="添加帐号"></a>添加帐号</h4></li>
<li>一般形式：useradd 用户名</li>
<li>设置口令：passwd 用户名<h4 id="删除帐号"><a href="#删除帐号" class="headerlink" title="删除帐号"></a>删除帐号</h4></li>
<li>一般形式：userdel -r 用户名<h2 id="2-2-6其他常用命令"><a href="#2-2-6其他常用命令" class="headerlink" title="2.2.6其他常用命令"></a>2.2.6其他常用命令</h2></li>
<li>查看磁盘空间（df）</li>
<li>管道(|)</li>
<li>awk</li>
<li>统计（wc） </li>
<li>判断文件类型（file） </li>
<li>tee<h3 id="一、查看文件系统的磁盘空间使用信息"><a href="#一、查看文件系统的磁盘空间使用信息" class="headerlink" title="一、查看文件系统的磁盘空间使用信息"></a>一、查看文件系统的磁盘空间使用信息</h3></li>
<li>格式：df [选项] [文件系统]</li>
<li>选项：<ul>
<li>缺省 以k字节为单位显示磁盘使用信息</li>
<li>-h 分别以K 、M、G字节为单位显示磁盘空间使用情况</li>
</ul>
</li>
<li>如：<ul>
<li>$df </li>
<li>$df -h </li>
<li>$df -h /dev/sda1<h3 id="二、管道（-）"><a href="#二、管道（-）" class="headerlink" title="二、管道（|）"></a>二、管道（|）</h3></li>
</ul>
</li>
<li>可以通过管道把一个命令的输出命令1 | 命令2传递给另一个命令作为输入。管道用竖杠|表示。它的一般形式为：命令1 | 命令2<h3 id="三、awk"><a href="#三、awk" class="headerlink" title="三、awk"></a>三、awk</h3>把文件或命令的执行结果逐行读入，以空格为单位进行分割，按条件提取所需内容。它的<br>一般形式为：awk ‘{条件}’ 文件或 命令 | awk ‘{条件}’<h3 id="四、WC-统计命令"><a href="#四、WC-统计命令" class="headerlink" title="四、WC(统计命令)"></a>四、WC(统计命令)</h3></li>
<li>统计指定文件或命令输出结果中的字节数、字数和行数，并输出统计结果。一般形式为：</li>
<li>wc [参数] 文件名</li>
<li>命令|wc [参数]</li>
<li>参数：<ul>
<li>-c 统计字节数</li>
<li>-l 统计行数</li>
<li>-w 统计字数<h3 id="五、file-判断文件类型"><a href="#五、file-判断文件类型" class="headerlink" title="五、file(判断文件类型)"></a>五、file(判断文件类型)</h3></li>
</ul>
</li>
<li>格式：file 文件名<h3 id="六、tee命令"><a href="#六、tee命令" class="headerlink" title="六、tee命令"></a>六、tee命令</h3></li>
<li>功能：把输出的结果既保存到文件里，也显示到屏幕上。</li>
<li>它的一般形式为：tee -a files<h1 id="2-3-shell的输入与输出"><a href="#2-3-shell的输入与输出" class="headerlink" title="2.3 shell的输入与输出"></a>2.3 shell的输入与输出</h1></li>
<li>指shell命令或脚本执行时数据的输入或输出。</li>
<li>⑴ 在shell中，输入数据的方式主要有两种：一种是使 用标准输入—键盘，或者指定一个文件作为输入；</li>
<li>⑵ 对于输出也是一样：标准输出——屏幕，或者指定一个文件作为输出；</li>
<li>⑶ 执行命令或脚本时出现了错误，产生的错误提示信息，缺省输出到屏幕上，也可以把这些信息</li>
<li>主要内容：<ul>
<li>标准输入、标准输出及标准错误输出</li>
<li>输入/输出重定向<h2 id="2-3-1标准输入、标准输出及标准错误输出"><a href="#2-3-1标准输入、标准输出及标准错误输出" class="headerlink" title="2.3.1标准输入、标准输出及标准错误输出"></a>2.3.1标准输入、标准输出及标准错误输出</h2><h3 id="一、标准输出"><a href="#一、标准输出" class="headerlink" title="一、标准输出"></a>一、标准输出</h3><h4 id="（一）echo"><a href="#（一）echo" class="headerlink" title="（一）echo"></a>（一）echo</h4></li>
</ul>
</li>
<li>使用echo命令可以把要输出的信息写到“”中， 当字符串输出，也可以输出变量的有。它的一般形式为：<ul>
<li>echo “string”</li>
</ul>
</li>
<li>若字符串中有特殊字符，如：<ul>
<li>\c不换行</li>
<li>\t跳格</li>
<li>\n换行<h4 id="（二）cat"><a href="#（二）cat" class="headerlink" title="（二）cat"></a>（二）cat</h4></li>
</ul>
</li>
<li>cat是一个简单而通用的命令，可以用它来显示输出文件内容。</li>
<li>一般形式：$ cat myfile<h3 id="二、标准输入"><a href="#二、标准输入" class="headerlink" title="二、标准输入"></a>二、标准输入</h3><h4 id="（一）read"><a href="#（一）read" class="headerlink" title="（一）read"></a>（一）read</h4></li>
<li>使用read命令可以从键盘中读入数据并将其赋给一个变量。它的一般形式为：read 变量1 变量2<h2 id="2-3-2输入-输出重定向"><a href="#2-3-2输入-输出重定向" class="headerlink" title="2.3.2输入/输出重定向"></a>2.3.2输入/输出重定向</h2><h3 id="一、输出重定向（-gt-和-gt-gt-）"><a href="#一、输出重定向（-gt-和-gt-gt-）" class="headerlink" title="一、输出重定向（&gt;和 &gt;&gt;）"></a>一、输出重定向（&gt;和 &gt;&gt;）</h3><h4 id="（一）-gt"><a href="#（一）-gt" class="headerlink" title="（一）&gt;"></a>（一）&gt;</h4></li>
<li>把命令的输出数据定向到文件中（覆盖）</li>
<li>格式：cat filename1 filename2 …&gt; file<h4 id="（二）-gt-gt"><a href="#（二）-gt-gt" class="headerlink" title="（二）&gt;&gt;"></a>（二）&gt;&gt;</h4></li>
<li>把命令的标准输出定向到文件中（追加）<h3 id="二、输入重定向（-lt-和-lt-lt-）"><a href="#二、输入重定向（-lt-和-lt-lt-）" class="headerlink" title="二、输入重定向（&lt;和&lt;&lt;）"></a>二、输入重定向（&lt;和&lt;&lt;）</h3><h4 id="（一）-lt"><a href="#（一）-lt" class="headerlink" title="（一）&lt;"></a>（一）&lt;</h4></li>
<li>命令的输入被定向来自于文件</li>
<li>$ sort &lt; name.txt<h4 id="二-（-lt-lt-）即时文件定向符"><a href="#二-（-lt-lt-）即时文件定向符" class="headerlink" title="(二)（&lt;&lt;）即时文件定向符"></a>(二)（&lt;&lt;）即时文件定向符</h4></li>
<li>命令的输入被定向来自于文件，这个文</li>
<li>件是由一对定界符标识的若干行构成<h3 id="三、与文件描述符有关的重定向"><a href="#三、与文件描述符有关的重定向" class="headerlink" title="三、与文件描述符有关的重定向"></a>三、与文件描述符有关的重定向</h3>Linux每打开一个文件，会给该文件分配一个数字，这个数字称为文件描述符，通常都是通过文件名对文件进行操作，也可以通过文件描述符对文件进行操作（3-num）。下面这些是常用文件描述符及它们通常所对应的文件名</li>
</ul>
<div class="table-container">
<table>
<thead>
<tr>
<th>文件</th>
<th>文件描述符</th>
</tr>
</thead>
<tbody>
<tr>
<td>标准输入（默认键盘）</td>
<td>0</td>
</tr>
<tr>
<td>标准输出 （默认屏幕）</td>
<td>1</td>
</tr>
<tr>
<td>标准错误输出（默认屏幕）</td>
<td>2</td>
</tr>
</tbody>
</table>
</div>
<h4 id="（一）使用文件描符重定向的基本用法"><a href="#（一）使用文件描符重定向的基本用法" class="headerlink" title="（一）使用文件描符重定向的基本用法"></a>（一）使用文件描符重定向的基本用法</h4><ul>
<li>在错误信息进行重定向时，必须要使用文件描述符，但是对于标准输入和输出来说，这不是必需的。</li>
<li>command 2 &gt; filename 把标准错误输出重定向到一个文件中</li>
<li><ul>
<li>command 2 &gt;&gt; filename 把标准输出重定向到一个文件中(追加)</li>
</ul>
</li>
<li>command &gt; filename 把标准输出重定向到一个文件中（通常省略描述符1）</li>
<li>command &gt;&gt; filename 把标准输出重定向到一个文件中(追加)（通常省略描述符1）<h4 id="（二）合并标准输出和标准错误输出的重定向"><a href="#（二）合并标准输出和标准错误输出的重定向" class="headerlink" title="（二）合并标准输出和标准错误输出的重定向"></a>（二）合并标准输出和标准错误输出的重定向</h4>在上面的例子中， grep命令的标准输出和标准错误都被重定向到grep.out文件中<h1 id="2-4命令执行顺序"><a href="#2-4命令执行顺序" class="headerlink" title="2.4命令执行顺序"></a>2.4命令执行顺序</h1>在shell中，如果希望在一个命令执行成功后再执行另一个命令，或者在一个命令执行失败后再执行另一个命令，&amp;&amp; 和 || 控制命令执行顺序。<h2 id="2-4-1-使用-amp-amp"><a href="#2-4-1-使用-amp-amp" class="headerlink" title="2.4.1 使用&amp;&amp;"></a>2.4.1 使用&amp;&amp;</h2>使用&amp;&amp;的一般形式为：<br>命令1 &amp;&amp; 命令2 当&amp;&amp;左边的命令（命令1）返回真(即返回0，成功被执行）后，&amp;&amp;右边的命令（命令2）才能够被执行；<h2 id="2-4-2-使用"><a href="#2-4-2-使用" class="headerlink" title="2.4.2 使用||"></a>2.4.2 使用||</h2>使用||的一般形式为：<br>命令1 || 命令2<br>||的作用有一些不同。如果||左边的命令（命 令1）未执行成功，那么就执行||右边的命令<br>（命令2）；或者换句话说，“如果这个命令执行失败了|| 那么就执行这个命令“<h2 id="2-4-3用（）将命令结合在一起"><a href="#2-4-3用（）将命令结合在一起" class="headerlink" title="2.4.3用（）将命令结合在一起"></a>2.4.3用（）将命令结合在一起</h2></li>
<li>如果希望把几个命令合在一起执行， 可以用命令分隔符隔开每一个命令，并把所有的命令用圆括号（）括起来。</li>
<li>它的一般形式为： （命令1; 命令2; . . .）<h1 id="2-5正则表达式"><a href="#2-5正则表达式" class="headerlink" title="2.5正则表达式"></a>2.5正则表达式</h1></li>
<li>在shell脚本编程中，正则表达式是非常重要的。一个好的脚本和一个质量一般脚本之间的差别之一，就看能否正确合理的运用正则表达式。</li>
<li>正则表达式的组成：<ul>
<li>(1)一般字符：没有特殊意义的字符例如，A将查询A，x将查找字母x</li>
<li>(2)特殊字符（meta字符）：元字符，在正则表达式中有特殊意义<h2 id="2-5-1-使用句点匹配单字符"><a href="#2-5-1-使用句点匹配单字符" class="headerlink" title="2.5.1 使用句点匹配单字符"></a>2.5.1 使用句点匹配单字符</h2><h2 id="2-5-2-使用-从行首开始匹配字符"><a href="#2-5-2-使用-从行首开始匹配字符" class="headerlink" title="2.5.2 使用^从行首开始匹配字符"></a>2.5.2 使用^从行首开始匹配字符</h2></li>
</ul>
</li>
<li>^只允许在一行的开始查找字符。<h2 id="2-5-3-使用-在行尾匹配字符或字符串"><a href="#2-5-3-使用-在行尾匹配字符或字符串" class="headerlink" title="2.5.3 使用$在行尾匹配字符或字符串"></a>2.5.3 使用$在行尾匹配字符或字符串</h2></li>
<li>例如：查找以abc结尾的所有行，正则表达式如下：abc$<h2 id="2-5-4-使用-匹配任意数量的字符"><a href="#2-5-4-使用-匹配任意数量的字符" class="headerlink" title="2.5.4 使用*匹配任意数量的字符"></a>2.5.4 使用*匹配任意数量的字符</h2></li>
<li>代表任意数量的字符。例如，正则表达式如下：compu*t<h2 id="2-5-5-使用-屏蔽特殊字符的含义"><a href="#2-5-5-使用-屏蔽特殊字符的含义" class="headerlink" title="2.5.5 使用 \ 屏蔽特殊字符的含义"></a>2.5.5 使用 \ 屏蔽特殊字符的含义</h2></li>
<li>有时要查找的字符是系统指定的特殊字符<h2 id="2-5-6-使用-匹配一个范围或集合"><a href="#2-5-6-使用-匹配一个范围或集合" class="headerlink" title="2.5.6 使用[ ]匹配一个范围或集合"></a>2.5.6 使用[ ]匹配一个范围或集合</h2></li>
<li>如，要查找包含0-9中任意一个数字的行，正则表达式如下：[ 0 - 9 ]<h2 id="2-5-7-使用-控制匹配字符连续出现的次数"><a href="#2-5-7-使用-控制匹配字符连续出现的次数" class="headerlink" title="2.5.7 使用 \{\} 控制匹配字符连续出现的次数"></a>2.5.7 使用 \{\} 控制匹配字符连续出现的次数</h2></li>
<li>匹配模式有三种，即：<ul>
<li>字符\{n\} 匹配字符连续出现n次。</li>
<li>字符\{n,\} 匹配字符最少连续出现n次。</li>
<li>字符\{n,m} 匹配字符出现的次数在n到m之间n , m为0 - 2 5 5中任意整数。<h1 id="2-6-t-r-命令"><a href="#2-6-t-r-命令" class="headerlink" title="2.6 t r 命令"></a>2.6 t r 命令</h1></li>
</ul>
</li>
<li>功能：替换或删除字符。<ul>
<li>删除重复出现的字符</li>
<li>删除空行</li>
<li>大小写字符转换<h2 id="2-6-1-删除重复出现的字符"><a href="#2-6-1-删除重复出现的字符" class="headerlink" title="2.6.1 删除重复出现的字符"></a>2.6.1 删除重复出现的字符</h2></li>
</ul>
</li>
<li>下面文件包含了一些不希望看到的重复出现的字符。例如，在编辑文件时，偶尔一个键按的时间长了。</li>
<li>格式为：<ul>
<li>tr [参数] 字符串 &lt; file</li>
</ul>
</li>
<li>参数：<ul>
<li>-d 删除指定字符串中的所有字符。</li>
<li>-s 删除字指定符串中所有重复出现的字符，只保留第一个。</li>
<li>-c 删除指定字符串以外的所有字符。<h2 id="2-6-2-删除空行"><a href="#2-6-2-删除空行" class="headerlink" title="2.6.2 删除空行"></a>2.6.2 删除空行</h2></li>
</ul>
</li>
<li>下面文件中有许多空行。要将这些空行从文件中删除 pg plane.txt</li>
<li>tr中特定控制字符<br>|符号| 含义 |八进制方式|<br>| —— | —————- | —————- |<br>|\a| Ctrl-G 铃声 |\ 0 0 7|<br>|\b|Ctrl-H 退格符 |\ 0 1 0|<br>|\f| Ctrl-L 换页 |\ 0 1 4|<br>|\n| Ctrl-J 换行 |\ 0 1 2|<br>|\t| Ctrl-I tab键 |\ 0 11|<br>|\v| Ctrl-X |\ 0 3 0|<h2 id="2-6-3大写、小写字符转换"><a href="#2-6-3大写、小写字符转换" class="headerlink" title="2.6.3大写、小写字符转换"></a>2.6.3大写、小写字符转换</h2></li>
<li>将文件或命令输出结果中的大小写字 符进行转换</li>
<li>格式为：<ul>
<li>tr字符串1 字符串2 file</li>
<li>或</li>
<li>命令I tr字符串1字符串2</li>
</ul>
</li>
</ul>

      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2022/01/03/linux/%E4%BA%8C%E3%80%81linux-shell%E6%95%99%E7%A8%8B/" data-id="cl403sxrg0021f8vubmo640vh" data-title="二、linux shell教程" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
    
<nav id="article-nav">
  
    <a href="/notes-on-computer-expertise/2022/01/11/%E8%99%9A%E5%B9%BB4%E5%BC%95%E6%93%8E%E5%BC%80%E5%8F%91/%E4%B8%80%E3%80%81%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C-%E5%BC%80%E5%A7%8B%E5%BB%BA%E6%A8%A1/" id="article-nav-newer" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Newer</strong>
      <div class="article-nav-title">
        
          一、准备工作 开始建模
        
      </div>
    </a>
  
  
    <a href="/notes-on-computer-expertise/2022/01/03/linux/%E4%BA%94%E3%80%81/" id="article-nav-older" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Older</strong>
      <div class="article-nav-title">五</div>
    </a>
  
</nav>

  
</article>


</section>
        
          <aside id="sidebar">
  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Categories</h3>
    <div class="widget">
      <ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/C-%E5%B7%A5%E5%85%B7/">C#工具</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/C-%E5%B7%A5%E5%85%B7/">C++工具</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/Mysql/">Mysql</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/blender/">blender</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/linux/">linux</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/manim/">manim</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/spring/">spring</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/vba%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C/">vba基础操作</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/">创造模式</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/">操作系统</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/">操作系统基础知识</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%8F%91/">操作系统开发</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%95%B0%E5%AD%A6/">数学</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/">数据结构</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/">数据结构基础知识</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%A8%A1%E6%9D%BF/">模板</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/">深度学习</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%8B%B1%E8%AF%AD/">英语</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%99%9A%E5%B9%BB4/">虚幻4</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86/">计算机组成原理</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/">计算机网络</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Tags</h3>
    <div class="widget">
      <ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/notes-on-computer-expertise/tags/C/" rel="tag">C++</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Tag Cloud</h3>
    <div class="widget tagcloud">
      <a href="/notes-on-computer-expertise/tags/C/" style="font-size: 10px;">C++</a>
    </div>
  </div>

  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Archives</h3>
    <div class="widget">
      <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/05/">May 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/03/">March 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/02/">February 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/01/">January 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2021/12/">December 2021</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Recent Posts</h3>
    <div class="widget">
      <ul>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/31/vue/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6%E9%AA%8C%E8%AF%81%E7%A0%81%E6%97%A0%E6%B3%95%E6%98%BE%E7%A4%BA/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/26/%E6%95%B0%E6%8D%AE%E5%BA%93/navicat%E5%AE%89%E8%A3%85/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/25/%E8%99%9A%E5%B9%BB4%E5%BC%95%E6%93%8E%E5%BC%80%E5%8F%91/%E8%99%9A%E5%B9%BB%E5%9B%9B%20mod%E5%88%B6%E4%BD%9C/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/23/python/python%E6%89%B9%E9%87%8F%E7%94%9F%E6%88%90%E6%95%B0%E6%8D%AE/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/23/vba%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C%E7%AC%94%E8%AE%B0/EXCEL%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/">(no title)</a>
          </li>
        
      </ul>
    </div>
  </div>

  
</aside>
        
      </div>
      <footer id="footer">
  
  <div class="outer">
    <div id="footer-info" class="inner">
      
      &copy; 2022 John Doe<br>
      Powered by <a href="https://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer>

    </div>
    <nav id="mobile-nav">
  
    <a href="/notes-on-computer-expertise/" class="mobile-nav-link">Home</a>
  
    <a href="/notes-on-computer-expertise/archives" class="mobile-nav-link">Archives</a>
  
</nav>
    


<script src="/notes-on-computer-expertise/js/jquery-3.4.1.min.js"></script>



  
<script src="/notes-on-computer-expertise/fancybox/jquery.fancybox.min.js"></script>




<script src="/notes-on-computer-expertise/js/script.js"></script>





  </div>
<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
        tex2jax: {
            inlineMath: [ ["$","$"], ["\\(","\\)"] ],
            skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code'],
            processEscapes: true
        }
    });
    MathJax.Hub.Queue(function() {
        var all = MathJax.Hub.getAllJax();
        for (var i = 0; i < all.length; ++i)
            all[i].SourceElement().parentNode.className += ' has-jax';
    });
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML"></script>
</body>
</html>